package com.zbkj.common.model.bte;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 银企回调参数实体
 *
 * @author Swallows
 * @date 2022-08-25 19:42
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
//@TableName("eb_pay_callback")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class CallBackEntity implements Serializable {

    private static final long serialVersionUID=1L;

    /**
     * 数币营销补贴金额
     */
    @JsonProperty("ecny_amount")
    private BigDecimal ecnyAmount;

    @JsonProperty("mer_discount_amount")
    private BigDecimal merDiscountAmount;

    /**
     * 退款完成时间，格式为yyyy-MM-dd HH:mm:ss
     */
    @JsonProperty("refund_time")
    private String refundTime;

    /**
     * 退款优惠信息，微信交易返回
     */
    @JsonProperty("refund_detail")
    private List<Object> refundDetail;

    /**
     * 优惠退款金额 单位元
     */
    @JsonProperty("coupon_refund_fee")
    private BigDecimal couponRefundFee;

    /**
     * 剩余可退金额 单位元
     */
    @JsonProperty("over_amount")
    private BigDecimal overAmount;

    /**
     * 实退金额，单位为元
     */
    @JsonProperty("net_receipt_amount")
    private BigDecimal netReceiptAmount;

    /**
     * 退款发起金额，单位为元
     */
    @JsonProperty("total_fee")
    private BigDecimal totalFee;

    /**
     * 微信侧退款订单号
     */
    @JsonProperty("plate_refund_no")
    private String plateRefundNo;

    /**
     * 退款状态
     * <br>REFUND_SUCCESS 退款成功
     * <br>REFUND_PROCESSING退款中
     * <br>REFUND_FAILER退款失败
     */
    @JsonProperty("refund_status")
    private String refundStatus;

    /**
     * 退款订单号 本系统自己生成
     */
    @JsonProperty("out_refund_no")
    private String outRefundNo;

    /**
     * 平台返回的退款订单号
     */
    @JsonProperty("refund_no")
    private String refundNo;

    /**
     * 订单号 本系统自己生成的(必传)
     */
    @JsonProperty("out_trade_no")
    private String outTradeNo;

    /**
     * 支付金额(必传)
     */
    @JsonProperty("total_amount")
    private BigDecimal totalAmount;

    /**
     * 费率
     */
    @JsonProperty("merchant_rate")
    private BigDecimal merchantRate;

    /**
     * 补贴金额(必传 没有则传0)
     */
    @JsonProperty("subsidy_fee")
    private BigDecimal subsidyFee;

    /**
     * 支付渠道(必传): <br>
     * 1-支付宝<br>
     * 2-微信<br>
     * 6-云闪付<br>
     * 9-数字人民币
     */
    @JsonProperty("pay_platform_type")
    private String payPlatformType;

    /**
     * 订单支付方式(必传): <br>
     * 2-native，原生扫码支付（支持支付宝、银联二维码、数字人民币、银联全渠道分期）<br>
     * 3-JSAPI，公众号支付，服务窗支付<br>
     * 4-小程序支付<br>
     * 6-云闪付JS支付
     */
    @JsonProperty("order_type")
    private Integer orderType;

    /**
     * 微信 支付宝下的子商户号 一个商户有多个子商户号的情况下必填
     */
    @JsonProperty("sub_merchant_no")
    private String subMerchantNo;

    /**
     * 付款用户id，“微信sub_openid”，“支付宝 user_id”，“云闪付user_id”
     * 微信公众号、小程序、支付宝服务窗、支付宝小程序、云闪付JS支付必填
     */
    @JsonProperty("user_id")
    private String userId;

    private String sign;

    /**
     * 签名类型
     */
    @JsonProperty("sign_type")
    private String signType;

    @JsonProperty("net_money")
    private BigDecimal netMoney;

    /**
     * 支付平台配置的手续费率
     */
    @JsonProperty("pay_platform_rate")
    private BigDecimal payPlatformRate;

    /**
     * 买家实际支付金额
     */
    @JsonProperty("buyer_pay_amount")
    private BigDecimal buyerPayAmount;

    /**
     * 支付平台交易订单号
     */
    @JsonProperty("trade_no")
    private String tradeNo;

    /**
     * 服务商手续费率
     */
    @JsonProperty("liquidator_commission_rate")
    private BigDecimal liquidatorCommissionRate;

    /**
     * 服务商手续费
     */
    @JsonProperty("liquidator_commission_fee")
    private BigDecimal liquidatorCommissionFee;

    /**
     * 支付平台手续费
     */
    @JsonProperty("pay_platform_fee")
    private String payPlatformFee;

    @JsonProperty("fund_bill_list")
    private String fundBillList;

    /**
     * 商家自定义返回参数
     */
//    @TableField(exist = false)
    private String extend;

    /**
     * 支付状态
     */
    @JsonProperty("pay_status")
    private Integer payStatus;

    /**
     * 上游平台订单号
     */
    @JsonProperty("platform_order_no")
    private String platformOrderNo;

    /**
     * 支付完成时间，支付成功时返回
     * 格式为yyyy-MM-dd HH:mm:ss
     */
    @JsonProperty("gmt_close")
    private String gmtClose;

    /**
     * 本次交易支付所使用的单品券优惠信息
     */
    @JsonProperty("discount_goods_detail")
    private String discountGoodsDetail;

    /**
     * 卡类型：0-借记卡；1-贷记卡；2-其他；
     */
    @JsonProperty("card_type")
    private Integer cardType;

    /**
     * 应结订单金额（微信支付宝）
     */
    @JsonProperty("receipt_amount")
    private BigDecimal receiptAmount;

    /**
     * 最大分账金额
     */
    @JsonProperty("max_share_amount")
    private BigDecimal maxShareAmount;

    /**
     * 聚合平台分配的商户id(必传)
     */
    @JsonProperty("store_id")
    private String storeId;

    /**
     * 服务商分配给我们的id
     */
    @JsonProperty("merchant_id")
    private String merchantId;

    /**
     * 1:支付宝线下支付,  3:微信线下支付, 16:银行卡收单借记, 17:银行卡收单贷记, 20:银联线下支付,
     * 62:银联分期交易, 232:微信0费率行业, 233:微信0.1费率行业, 234:微信0.3费率行业,
     * 235:微信0.38费率行业, 236:微信0.6费率行业, 300:支付宝0费率行业, 301:支付宝0.1费率行业，
     * 241:普通支付宝预授权，242:普通微信预授权，243:普通银联二维码预授权，244:普通支付宝预授权完成，
     * 245:普通微信预授权完成，246:普通银联二维码预授权完成
     */
    @JsonProperty("pay_type")
    private String payType;

    /**
     * 发卡行
     */
    @JsonProperty("bank_name")
    private String bankName;

    /**
     * pos批次号
     */
    @JsonProperty("pos_batch_no")
    private String posBatchNo;

    /**
     * pos流水号
     */
    @JsonProperty("pos_trace_no")
    private String posTraceNo;

    /**
     * 机具信息
     */
    @JsonProperty("device_info")
    private String deviceInfo;

    @JsonProperty("risk_info")
    private RiskInfo riskInfo;

//    ============= 微信特有字段 ===============
    /**
     * 付款银行，采用字符串类型的银行标识
     */
    @JsonProperty("bank_type")
    private String bankType;

    /**
     * 代金券金额
     */
    @JsonProperty("coupon_fee")
    private String couponFee;
//    ============= 微信特有字段 ===============

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class RiskInfo {

        /**
         * ip
         */
        private String terminalIp;

        /**
         * 设备 GPS 位置
         */
        private String terminalLocation;
    }
}
